package exercises.newcoder.solution;

import exercises.newcoder.util.TreeNode;

/**
 * <a href="https://www.nowcoder.com/practice/ff05d44dfdb04e1d83bdbdab320efbcb?tpId=13&tqId=23452&ru=/ta/sql-quick-study&qru=/ta/sql-quick-study/question-ranking">
 * JZ58 对称的二叉树</a>
 *
 * <p><span color="#87CEEB">描述:</span>
 * 请实现一个函数，用来判断一棵二叉树是不是对称的。注意，如果一个二叉树同此二叉树的镜像是同样的，定义其为对称的。
 * <p>
 * 示例1
 * 输入：
 * {8,6,6,5,7,7,5}
 * <p>
 * 返回值：
 * true
 * <p>
 * 示例2
 * 输入：
 * {8,6,9,5,7,7,5}
 * <p>
 * 返回值：
 * false
 *
 * @author or2
 * @date 2021年10月07日 时间: 7:48
 */
public class JZ58 {
    boolean isSymmetrical(TreeNode pRoot) {
        if (pRoot == null)
            return true;
        return check(pRoot.left, pRoot.right);
    }

    private boolean check(TreeNode left, TreeNode right) {
        if (left == null && right == null)
            return true;
        if (left == null || right == null)
            return false;
        if (left.val != right.val)
            return false;
        return check(left.left, right.right) && check(left.right, right.left);
    }
}
